﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EnviamentDeDocuments.ObjectesDeDades;
using EnviamentDeDocuments.ObjectesDeDades.TDiariExpedDadesVariablesDataSetTableAdapters;
using EnviamentDeDocuments.Formularis;
using System.Windows.Forms;

namespace EnviamentDeDocuments.ObjectesDeNegoci
{
    class ComprovarDadesController : Controller
    {

        public List<Client> ClientsSeleccionats { get; set; }
        public List<Impost> ImpostosSeleccionats { get; set; }
        public List<Periode> PeriodesSeleccionats { get; set; }
        public Exercici ExerciciSeleccionat { get; set; }

        public override void run()
        {
            TDiariExpedDadesVariablesDataSet ds = new ObjectesDeDades.TDiariExpedDadesVariablesDataSet();
            TClientsTableAdapter ta = new ObjectesDeDades.TDiariExpedDadesVariablesDataSetTableAdapters.TClientsTableAdapter();
            ta.Fill(ds.TClients);

            //Eliminem les dades dels clients que venen del programa d'expedients del contexte
            foreach (Client c in Contexte.getClients())
            {
                c.TrobatBDExpedients = false;
                c.Valid = false;
                c.Email = null;
            }

            //I les tornem a refrescar
            foreach (TDiariExpedDadesVariablesDataSet.TClientsRow row in ds.TClients)
            {
                Client client = (from Client c in Contexte.getClients() where c.Nif.ToUpper() == row.CIF.ToUpper() select c).FirstOrDefault();
                if (client != null)
                {
                    client.TrobatBDExpedients = true;
                    if (!row.IsEmailImpostosNull()) {client.Email = row.EmailImpostos; client.Valid = true; }
                    if (!row.IsContacteImpostosNull()) client.Contacte = row.ContacteImpostos; else client.Contacte = "";
                }                
            }

            //Construim string amb les dades de l'enviament
            String strDadesEnviament;
            strDadesEnviament = "S'enviaran les dades a " + (from Client c in ClientsSeleccionats where c.TrobatBDExpedients && !String.IsNullOrEmpty(c.Email) select c).Count() + " clients. Les dades seleccionades son:" + Environment.NewLine;
            strDadesEnviament += "     " + "Impostos Seleccionats: " + ImpostosSeleccionatsToString() + Environment.NewLine;
            strDadesEnviament += "     " + "Exercici Seleccionat: " + ExerciciSeleccionat.ToString() + Environment.NewLine;
            strDadesEnviament += "     " + "Períodes Seleccionats: " + PeriodesSeleccionatsToString() + Environment.NewLine;

            frmValidacio frm = new frmValidacio();
            frm.DadesEnviament = strDadesEnviament;

            //Mirem els clients invàlids
            foreach (Client c in ClientsSeleccionats)
            {
                if (!c.TrobatBDExpedients) { frm.addClientsDadesInvalides(c.Nif, c.Nom, "No trobat a la base de dades d'expedients"); }
                else if (String.IsNullOrEmpty(c.Email)) { frm.addClientsDadesInvalides(c.Nif, c.Nom, "El client no te un email vàlid a la base de dades d'expedients"); }
            }

            frm.ShowDialog();

            if (frm.Continuar)
                ProximaAccio = enumProximaAccio.ProximPas;
            else
                ProximaAccio = enumProximaAccio.AnteriorPas;

        }

        private String ImpostosSeleccionatsToString()
        {
            String resultat = "";

            for (int i = 0; i < ImpostosSeleccionats.Count; i++)
            {
                resultat += ImpostosSeleccionats[i].Codi + ", ";
            }

            if (resultat.Length > 2) resultat = resultat.Substring(0, resultat.Length - 2);

            return resultat;
        }

        private String PeriodesSeleccionatsToString()
        {
            String resultat = "";

            for (int i = 0; i < PeriodesSeleccionats.Count; i++)
            {
                resultat += PeriodesSeleccionats[i].Nom + ", ";
            }

            if (resultat.Length > 2) resultat = resultat.Substring(0, resultat.Length - 2);

            return resultat;
        }

    }
}
